home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Graphics Programming (2nd Edition) / Visual Basic Graphics Programming 2nd Edition.iso / OldSrc / CH10 / SRC / ROTATE.FRM < prev    next >
Text File  |  1996-05-02  |  20KB  |  716 lines

  1. VERSION 4.00
  2. Begin VB.Form RotatedForm 
  3.    Appearance      =   0  'Flat
  4.    BackColor       =   &H00C0C0C0&
  5.    Caption         =   "Surfaces of Rotation"
  6.    ClientHeight    =   5700
  7.    ClientLeft      =   690
  8.    ClientTop       =   900
  9.    ClientWidth     =   7830
  10.    BeginProperty Font 
  11.       name            =   "MS Sans Serif"
  12.       charset         =   1
  13.       weight          =   700
  14.       size            =   8.25
  15.       underline       =   0   'False
  16.       italic          =   0   'False
  17.       strikethrough   =   0   'False
  18.    EndProperty
  19.    ForeColor       =   &H80000008&
  20.    Height          =   6390
  21.    KeyPreview      =   -1  'True
  22.    Left            =   630
  23.    LinkTopic       =   "Form1"
  24.    ScaleHeight     =   380
  25.    ScaleMode       =   3  'Pixel
  26.    ScaleWidth      =   522
  27.    Top             =   270
  28.    Width           =   7950
  29.    Begin VB.Frame Frame2 
  30.       Caption         =   "Curve"
  31.       Height          =   5295
  32.       Left            =   0
  33.       TabIndex        =   8
  34.       Top             =   0
  35.       Width           =   2295
  36.       Begin VB.OptionButton CurveChoice 
  37.          Caption         =   "Tornado"
  38.          Height          =   255
  39.          Index           =   13
  40.          Left            =   120
  41.          TabIndex        =   22
  42.          Top             =   4920
  43.          Width           =   2055
  44.       End
  45.       Begin VB.OptionButton CurveChoice 
  46.          Caption         =   "Helix"
  47.          Height          =   255
  48.          Index           =   12
  49.          Left            =   120
  50.          TabIndex        =   21
  51.          Top             =   4560
  52.          Width           =   2055
  53.       End
  54.       Begin VB.OptionButton CurveChoice 
  55.          Caption         =   "Tower"
  56.          Height          =   255
  57.          Index           =   11
  58.          Left            =   120
  59.          TabIndex        =   20
  60.          Top             =   4200
  61.          Width           =   2055
  62.       End
  63.       Begin VB.OptionButton CurveChoice 
  64.          Caption         =   "Football"
  65.          Height          =   255
  66.          Index           =   10
  67.          Left            =   120
  68.          TabIndex        =   19
  69.          Top             =   3840
  70.          Width           =   2055
  71.       End
  72.       Begin VB.OptionButton CurveChoice 
  73.          Caption         =   "Goblet"
  74.          Height          =   255
  75.          Index           =   9
  76.          Left            =   120
  77.          TabIndex        =   18
  78.          Top             =   3480
  79.          Width           =   2055
  80.       End
  81.       Begin VB.OptionButton CurveChoice 
  82.          Caption         =   "Urn"
  83.          Height          =   255
  84.          Index           =   8
  85.          Left            =   120
  86.          TabIndex        =   17
  87.          Top             =   3120
  88.          Width           =   2055
  89.       End
  90.       Begin VB.OptionButton CurveChoice 
  91.          Caption         =   "Sine Wave"
  92.          Height          =   255
  93.          Index           =   7
  94.          Left            =   120
  95.          TabIndex        =   16
  96.          Top             =   2760
  97.          Width           =   2055
  98.       End
  99.       Begin VB.OptionButton CurveChoice 
  100.          Caption         =   "Semicircle 2"
  101.          Height          =   255
  102.          Index           =   6
  103.          Left            =   120
  104.          TabIndex        =   15
  105.          Top             =   2400
  106.          Width           =   2055
  107.       End
  108.       Begin VB.OptionButton CurveChoice 
  109.          Caption         =   "Semicircle 1"
  110.          Height          =   255
  111.          Index           =   5
  112.          Left            =   120
  113.          TabIndex        =   14
  114.          Top             =   2040
  115.          Width           =   2055
  116.       End
  117.       Begin VB.OptionButton CurveChoice 
  118.          Caption         =   "Circle 2"
  119.          Height          =   255
  120.          Index           =   4
  121.          Left            =   120
  122.          TabIndex        =   13
  123.          Top             =   1680
  124.          Width           =   2055
  125.       End
  126.       Begin VB.OptionButton CurveChoice 
  127.          Caption         =   "Circle 1"
  128.          Height          =   255
  129.          Index           =   3
  130.          Left            =   120
  131.          TabIndex        =   12
  132.          Top             =   1320
  133.          Width           =   2055
  134.       End
  135.       Begin VB.OptionButton CurveChoice 
  136.          Caption         =   "3/4 Rectangle"
  137.          Height          =   255
  138.          Index           =   2
  139.          Left            =   120
  140.          TabIndex        =   11
  141.          Top             =   960
  142.          Width           =   2055
  143.       End
  144.       Begin VB.OptionButton CurveChoice 
  145.          Caption         =   "Diamond"
  146.          Height          =   255
  147.          Index           =   1
  148.          Left            =   120
  149.          TabIndex        =   10
  150.          Top             =   600
  151.          Width           =   2055
  152.       End
  153.       Begin VB.OptionButton CurveChoice 
  154.          Caption         =   "Rectangle"
  155.          Height          =   255
  156.          Index           =   0
  157.          Left            =   120
  158.          TabIndex        =   9
  159.          Top             =   240
  160.          Value           =   -1  'True
  161.          Width           =   2055
  162.       End
  163.    End
  164.    Begin VB.CheckBox ShowAxesCheck 
  165.       Caption         =   "Show Axes"
  166.       Height          =   255
  167.       Left            =   2400
  168.       TabIndex        =   7
  169.       Top             =   5400
  170.       Width           =   1335
  171.    End
  172.    Begin VB.TextBox PhiText 
  173.       Height          =   285
  174.       Left            =   6960
  175.       TabIndex        =   6
  176.       Text            =   "0.1570"
  177.       Top             =   5400
  178.       Width           =   855
  179.    End
  180.    Begin VB.TextBox ThetaText 
  181.       Height          =   285
  182.       Left            =   5640
  183.       TabIndex        =   4
  184.       Text            =   "0.6283"
  185.       Top             =   5400
  186.       Width           =   855
  187.    End
  188.    Begin VB.TextBox RText 
  189.       Height          =   285
  190.       Left            =   4080
  191.       TabIndex        =   2
  192.       Text            =   "10"
  193.       Top             =   5400
  194.       Width           =   855
  195.    End
  196.    Begin VB.PictureBox Pict 
  197.       AutoRedraw      =   -1  'True
  198.       Height          =   5295
  199.       Left            =   2400
  200.       ScaleHeight     =   349
  201.       ScaleMode       =   3  'Pixel
  202.       ScaleWidth      =   357
  203.       TabIndex        =   0
  204.       Top             =   0
  205.       Width           =   5415
  206.    End
  207.    Begin MSComDlg.CommonDialog LoadDialog 
  208.       Left            =   1800
  209.       Top             =   5280
  210.       _version        =   65536
  211.       _extentx        =   847
  212.       _extenty        =   847
  213.       _stockprops     =   0
  214.       cancelerror     =   -1  'True
  215.    End
  216.    Begin VB.Label Label1 
  217.       Caption         =   "Phi"
  218.       Height          =   255
  219.       Index           =   2
  220.       Left            =   6600
  221.       TabIndex        =   5
  222.       Top             =   5415
  223.       Width           =   375
  224.    End
  225.    Begin VB.Label Label1 
  226.       Caption         =   "Theta"
  227.       Height          =   255
  228.       Index           =   1
  229.       Left            =   5040
  230.       TabIndex        =   3
  231.       Top             =   5415
  232.       Width           =   495
  233.    End
  234.    Begin VB.Label Label1 
  235.       Caption         =   "R"
  236.       Height          =   255
  237.       Index           =   0
  238.       Left            =   3840
  239.       TabIndex        =   1
  240.       Top             =   5415
  241.       Width           =   255
  242.    End
  243.    Begin VB.Menu mnuFile 
  244.       Caption         =   "&File"
  245.       Begin VB.Menu mnuFileLoad 
  246.          Caption         =   "&Load..."
  247.          Shortcut        =   ^L
  248.       End
  249.       Begin VB.Menu mnuFileSaveAs 
  250.          Caption         =   "&Save As..."
  251.          Shortcut        =   ^A
  252.       End
  253.       Begin VB.Menu mnuFileSep 
  254.          Caption         =   "-"
  255.       End
  256.       Begin VB.Menu mnuFileExit 
  257.          Caption         =   "E&xit"
  258.       End
  259.    End
  260. End
  261. Attribute VB_Name = "RotatedForm"
  262. Attribute VB_Creatable = False
  263. Attribute VB_Exposed = False
  264. Option Explicit
  265.  
  266. ' Location of viewing eye.
  267. Dim EyeR As Single
  268. Dim EyeTheta As Single
  269. Dim EyePhi As Single
  270.  
  271. Const dtheta = PI / 20
  272. Const Dphi = PI / 20
  273. Const Dr = 1
  274.  
  275. ' Location of focus point.
  276. Const FocusX = 0#
  277. Const FocusY = 0#
  278. Const FocusZ = 0#
  279.  
  280. Dim Projector(1 To 4, 1 To 4) As Single
  281.  
  282. Dim CurveNum As Integer
  283.  
  284. Dim ThePicture As ObjPicture
  285. Dim TheSurface As ObjRotated
  286.  
  287. Dim ShowingParameters As Boolean
  288.  
  289. ' ************************************************
  290. ' Create the selected curve.
  291. ' ************************************************
  292. Sub CreateCurve()
  293. Dim r As Single
  294. Dim offset As Single
  295. Dim dtheta As Single
  296. Dim theta As Single
  297. Dim y As Single
  298.  
  299.     Select Case CurveNum
  300.         Case 0  ' Rectangle.
  301.             TheSurface.AddCurvePoint -3, -1.5, 0
  302.             TheSurface.AddCurvePoint -3, 1.5, 0
  303.             TheSurface.AddCurvePoint -1, 1.5, 0
  304.             TheSurface.AddCurvePoint -1, -1.5, 0
  305.             TheSurface.AddCurvePoint -3, -1.5, 0
  306.  
  307.         Case 1  ' Diamond.
  308.             TheSurface.AddCurvePoint -3, 0, 0
  309.             TheSurface.AddCurvePoint -2, -1, 0
  310.             TheSurface.AddCurvePoint -1, 0, 0
  311.             TheSurface.AddCurvePoint -2, 1, 0
  312.             TheSurface.AddCurvePoint -3, 0, 0
  313.         
  314.         Case 2  ' 3/4 Rectangle.
  315.             TheSurface.AddCurvePoint 0, -1.5, 0
  316.             TheSurface.AddCurvePoint -3, -1.5, 0
  317.             TheSurface.AddCurvePoint -3, 1.5, 0
  318.             TheSurface.AddCurvePoint 0, 1.5, 0
  319.         
  320.         Case 3, 4   ' Circle 1, circle 2.
  321.             If CurveNum = 3 Then
  322.                 r = 2
  323.                 offset = 2
  324.             Else
  325.                 r = 1.5
  326.                 offset = 2.5
  327.             End If
  328.             dtheta = PI / 8
  329.             TheSurface.AddCurvePoint offset + r, 0, 0
  330.             For theta = dtheta To 2 * PI - dtheta + 0.1 Step dtheta
  331.                 TheSurface.AddCurvePoint _
  332.                     offset + r * Cos(theta), r * Sin(theta), 0
  333.             Next theta
  334.             TheSurface.AddCurvePoint offset + r, 0, 0
  335.         
  336.         Case 5, 6   ' Semicircle 1, semicircle 2.
  337.             If CurveNum = 5 Then
  338.                 r = 4
  339.                 offset = 0
  340.             Else
  341.                 r = 2
  342.                 offset = 2
  343.             End If
  344.             dtheta = PI / 8
  345.             TheSurface.AddCurvePoint offset, -r, 0
  346.             For theta = -PI / 2 + dtheta To PI / 2 - dtheta + 0.1 Step dtheta
  347.                 TheSurface.AddCurvePoint _
  348.                     offset + r * Cos(theta), _
  349.                     r * Sin(theta), _
  350.                     0
  351.             Next theta
  352.             TheSurface.AddCurvePoint offset, r, 0
  353.             
  354.         Case 7  ' Sine wave.
  355.             r = 0.7
  356.             dtheta = PI / 10
  357.             For theta = -PI To PI Step dtheta
  358.                 TheSurface.AddCurvePoint _
  359.                     1 + r + r * Sin(2 * theta), _
  360.                     theta, _
  361.                     0
  362.             Next theta
  363.             
  364.         Case 8  ' Urn.
  365.             dtheta = PI / 10
  366.             For theta = -PI To PI Step dtheta
  367.                 TheSurface.AddCurvePoint _
  368.                     PI / 2 + (-PI + theta) / 4 * Sin(2 * theta), _
  369.                     theta, _
  370.                     0
  371.             Next theta
  372.             
  373.         Case 9  ' Goblet.
  374.             TheSurface.AddCurvePoint 3, 3.5, 0
  375.             TheSurface.AddCurvePoint 2.5, 3, 0
  376.             TheSurface.AddCurvePoint 3, 1.5, 0
  377.             TheSurface.AddCurvePoint 2.5, 1, 0
  378.             TheSurface.AddCurvePoint 1, 1, 0
  379.             TheSurface.AddCurvePoint 0.5, 0.5, 0
  380.             TheSurface.AddCurvePoint 0.5, -1, 0
  381.             TheSurface.AddCurvePoint 1, -1.5, 0
  382.             TheSurface.AddCurvePoint 2, -1.5, 0
  383.             TheSurface.AddCurvePoint 2.5, -2, 0
  384.         
  385.         Case 10 ' Football.
  386.             For y = -4 To 4 Step 0.5
  387.                 TheSurface.AddCurvePoint 16 / 5 - y * y / 5, y, 0
  388.             Next y
  389.         
  390.         Case 11 ' Tower.
  391.             r = 1
  392.             dtheta = PI / 8
  393.             For theta = -PI To -PI / 2 Step dtheta
  394.                 TheSurface.AddCurvePoint _
  395.                     r + r * Cos(theta), _
  396.                     4 * r + r * Sin(theta), _
  397.                     0
  398.             Next theta
  399.             For theta = PI / 2 To -PI / 2 Step -dtheta
  400.                 TheSurface.AddCurvePoint _
  401.                     r + r * Cos(theta), _
  402.                     2 * r + r * Sin(theta), _
  403.                     0
  404.             Next theta
  405.             TheSurface.AddCurvePoint r, -3, 0
  406.         
  407.         Case 12 ' Helix.
  408.             r = 2
  409.             dtheta = PI / 4
  410.             For theta = -PI To PI Step dtheta
  411.                 TheSurface.AddCurvePoint _
  412.                     r * Cos(theta / 2), _
  413.                     theta, _
  414.                     r * Sin(theta / 2)
  415.             Next theta
  416.         
  417.         Case 13 ' Tornado.
  418.             r = 2
  419.             dtheta = PI / 4
  420.             For theta = -PI To PI Step dtheta
  421.                 r = 2 + theta / 2
  422.                 TheSurface.AddCurvePoint _
  423.                     r * Cos(theta / 2), _
  424.                     theta, _
  425.                     r * Sin(theta / 2)
  426.             Next theta
  427.     
  428.     End Select
  429. End Sub
  430.  
  431. Sub WaitEnd()
  432.     MousePointer = vbDefault
  433. End Sub
  434.  
  435. Sub WaitStart()
  436.     MousePointer = vbHourglass
  437.     DoEvents
  438. End Sub
  439.  
  440. ' ************************************************
  441. ' Create a new curve and rotate it.
  442. ' ************************************************
  443. Private Sub CurveChoice_Click(Index As Integer)
  444. Dim pline As ObjPolyline
  445.     
  446.     WaitStart
  447.     Set ThePicture = New ObjPicture
  448.     Set TheSurface = New ObjRotated
  449.     ThePicture.objects.Add TheSurface
  450.     
  451.     CurveNum = Index
  452.     CreateCurve
  453.     TheSurface.Rotate
  454.     
  455.     If ShowAxesCheck.value = vbChecked Then
  456.         Set pline = New ObjPolyline
  457.         ThePicture.objects.Add pline
  458.         pline.AddSegment 0, 0, 0, 5, 0, 0
  459.         pline.AddSegment 0, 0, 0, 0, 5, 0
  460.         pline.AddSegment 0, 0, 0, 0, 0, 5
  461.     End If
  462.     
  463.     DrawData Pict
  464.     Pict.SetFocus
  465. End Sub
  466.  
  467.  
  468.  
  469. ' *******************************************************
  470. ' Rotate the points in the cube and draw the cube.
  471. ' *******************************************************
  472. Private Sub DrawData(pic As Object)
  473. Dim x As Single
  474. Dim y As Single
  475. Dim z As Single
  476. Dim S(1 To 4, 1 To 4) As Single
  477. Dim t(1 To 4, 1 To 4) As Single
  478. Dim ST(1 To 4, 1 To 4) As Single
  479. Dim PST(1 To 4, 1 To 4) As Single
  480.  
  481.     MousePointer = vbHourglass
  482.     Refresh
  483.     
  484.     ' Prevent overflow errors when drawing lines
  485.     ' too far out of bounds.
  486.     On Error Resume Next
  487.     
  488.     ' Scale and translate so it looks OK in pixels.
  489.     m3Scale S, 35, -35, 1
  490.     m3Translate t, 180, 200, 0
  491.     m3MatMultiplyFull ST, S, t
  492.     m3MatMultiplyFull PST, Projector, ST
  493.     
  494.     ' Transform the points.
  495.     ThePicture.ApplyFull PST
  496.  
  497.     ' Display the data.
  498.     pic.Cls
  499.     ThePicture.Draw pic, EyeR
  500.     pic.Refresh
  501.  
  502.     ' Display the viewnig parameters.
  503.     ShowViewingParameters
  504.  
  505.     MousePointer = vbDefault
  506. End Sub
  507.  
  508. Sub ShowViewingParameters()
  509.     ShowingParameters = True
  510.     
  511.     RText.Text = Format$(EyeR, "0.0000")
  512.     ThetaText.Text = Format$(EyeTheta, "0.0000")
  513.     PhiText.Text = Format$(EyePhi, "0.0000")
  514.     
  515.     RText.Refresh
  516.     ThetaText.Refresh
  517.     PhiText.Refresh
  518.  
  519.     ShowingParameters = False
  520. End Sub
  521.  
  522.  
  523. Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  524.     Select Case KeyCode
  525.         Case vbKeyLeft
  526.             EyeTheta = EyeTheta - dtheta
  527.         
  528.         Case vbKeyRight
  529.             EyeTheta = EyeTheta + dtheta
  530.         
  531.         Case vbKeyUp
  532.             EyePhi = EyePhi - Dphi
  533.         
  534.         Case vbKeyDown
  535.             EyePhi = EyePhi + Dphi
  536.                 
  537.         Case Else
  538.             Exit Sub
  539.     End Select
  540.  
  541.     m3PProject Projector, m3Perspective, EyeR, EyePhi, EyeTheta, FocusX, FocusY, FocusZ, 0, 1, 0
  542.     DrawData Pict
  543. End Sub
  544.  
  545.  
  546. Private Sub Form_KeyPress(KeyAscii As Integer)
  547.     Select Case KeyAscii
  548.         Case Asc("+")
  549.             EyeR = EyeR + Dr
  550.         
  551.         Case Asc("-")
  552.             EyeR = EyeR - Dr
  553.         
  554.         Case Else
  555.             Exit Sub
  556.     End Select
  557.  
  558.     m3PProject Projector, m3Perspective, EyeR, EyePhi, EyeTheta, FocusX, FocusY, FocusZ, 0, 1, 0
  559.     DrawData Pict
  560. End Sub
  561.  
  562. Private Sub Form_Load()
  563.     ' Initialize the eye position.
  564.     EyeR = 10
  565.     EyeTheta = PI * 0.2
  566.     EyePhi = PI * 0.1
  567.     
  568.     ' Initialize the projection transformation.
  569.     m3PProject Projector, m3Perspective, EyeR, EyePhi, EyeTheta, FocusX, FocusY, FocusZ, 0, 1, 0
  570.  
  571.     Me.Show
  572.     CurveChoice_Click 0
  573. End Sub
  574.  
  575.  
  576. Private Sub mnuFileExit_Click()
  577.     Unload Me
  578. End Sub
  579.  
  580.  
  581. Private Sub mnuFileLoad_Click()
  582. Dim fname As String
  583. Dim filenum As Integer
  584. Dim txt As String
  585. Dim Xmin As Single
  586. Dim ymin As Single
  587. Dim xmax As Single
  588. Dim ymax As Single
  589. Dim i As Integer
  590.  
  591.     ' Allow the user to pick a file.
  592.     On Error Resume Next
  593.     LoadDialog.filename = "*.APF"
  594.     LoadDialog.ShowOpen
  595.     If Err.Number = cdlCancel Then
  596.         Unload LoadDialog
  597.         Exit Sub
  598.     ElseIf Err.Number <> 0 Then
  599.         Unload LoadDialog
  600.         Beep
  601.         MsgBox "Error selecting file.", , vbExclamation
  602.         Exit Sub
  603.     End If
  604.     On Error GoTo 0
  605.     
  606.     fname = LoadDialog.filename
  607.     LoadDialog.InitDir = Left$(fname, Len(fname) _
  608.         - Len(LoadDialog.FileTitle) - 1)
  609.  
  610.     ' Clear the picture.
  611.     Set ThePicture = Nothing
  612.     
  613.     ' Open the file.
  614.     filenum = FreeFile
  615.     Open fname For Input As #filenum
  616.     
  617.     ' Make sure it's an Object Picture File.
  618.     Input #filenum, txt
  619.     If txt <> "3D APF PICTURE" Then
  620.         Close filenum
  621.         Beep
  622.         MsgBox "Error reading file """ & fname & """.", , vbExclamation
  623.         Exit Sub
  624.     End If
  625.  
  626.     ' Read the picture.
  627.     MousePointer = vbHourglass
  628.     DoEvents
  629.     Set ThePicture = New ObjPicture
  630.     ThePicture.FileInput filenum
  631.     
  632.     ' Close the file.
  633.     Close filenum
  634.  
  635.     ' Refresh the display.
  636.     DrawData Pict
  637.     
  638.     ' Deselect all the option buttons.
  639.     For i = 0 To 13
  640.         If CurveChoice(i).value Then _
  641.             CurveChoice(i).value = False
  642.     Next i
  643.     
  644.     MousePointer = vbDefault
  645. End Sub
  646.  
  647. Private Sub mnuFileSaveAs_Click()
  648. Dim fname As String
  649. Dim filenum As Integer
  650.  
  651.     ' Allow the user to pick a file.
  652.     On Error Resume Next
  653.     LoadDialog.filename = "*.APF"
  654.     LoadDialog.Flags = cdlOFNOverwritePrompt + cdlOFNHideReadOnly
  655.     LoadDialog.ShowSave
  656.     If Err.Number = cdlCancel Then
  657.         Unload LoadDialog
  658.         Exit Sub
  659.     ElseIf Err.Number <> 0 Then
  660.         Unload LoadDialog
  661.         Beep
  662.         MsgBox "Error selecting file.", , vbExclamation
  663.         Exit Sub
  664.     End If
  665.     On Error GoTo 0
  666.     
  667.     fname = LoadDialog.filename
  668.     LoadDialog.InitDir = Left$(fname, Len(fname) _
  669.         - Len(LoadDialog.FileTitle) - 1)
  670.     
  671.     ' Open the file.
  672.     filenum = FreeFile
  673.     Open fname For Output As #filenum
  674.     
  675.     ' Write the picture.
  676.     ThePicture.FileWrite filenum
  677.     
  678.     ' Close the file.
  679.     Close filenum
  680. End Sub
  681.  
  682.  
  683.  
  684.  
  685.  
  686.  
  687. Private Sub PhiText_Change()
  688.     If ShowingParameters Then Exit Sub
  689.     EyePhi = CSng(PhiText.Text)
  690.     m3PProject Projector, m3Perspective, EyeR, EyePhi, EyeTheta, FocusX, FocusY, FocusZ, 0, 1, 0
  691.     DrawData Pict
  692. End Sub
  693.  
  694. Private Sub RText_Change()
  695.     If ShowingParameters Then Exit Sub
  696.     EyeR = CSng(RText.Text)
  697.     m3PProject Projector, m3Perspective, EyeR, EyePhi, EyeTheta, FocusX, FocusY, FocusZ, 0, 1, 0
  698.     DrawData Pict
  699. End Sub
  700.  
  701.  
  702. ' ************************************************
  703. ' Redraw with the axes on or off as appropriate.
  704. ' ************************************************
  705. Private Sub ShowAxesCheck_Click()
  706.     CurveChoice_Click CurveNum
  707. End Sub
  708.  
  709. Private Sub ThetaText_Change()
  710.     If ShowingParameters Then Exit Sub
  711.     EyeTheta = CSng(ThetaText.Text)
  712.     m3PProject Projector, m3Perspective, EyeR, EyePhi, EyeTheta, FocusX, FocusY, FocusZ, 0, 1, 0
  713.     DrawData Pict
  714. End Sub
  715.  
  716.